/*
 * One example for NOI CSP-J Lesson 10:
 * <https://courses.fmsoft.cn/plzs/noijunior-csp-exercises-lower.html>
 *
 * Author: Vincent Wei
 *  - <https://github.com/VincentWei>
 *  - <https://gitee.com/vincentwei7>
 *
 * Copyright (C) 2025 FMSoft <https://www.fmsoft.cn>.
 * License: GPLv3
 */
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

using namespace std;

/*
  贪婪法：
    - 贪婪原则：每次优先选择面值最高的硬币找零。
    - 状态定义：剩余的找零钱款值。
*/
size_t min_coins(vector<unsigned> &coins, size_t amount)
{

    // 将可用的硬币面值做个排序。
    sort(coins.begin(), coins.end());

    size_t res = 0;

    // 从面值最高的硬币算起
    for (ssize_t i = coins.size() - 1; i >= 0; i--) {
        if (amount >= coins[i]) {

            // 计算需要多少枚当前面值的硬币
            size_t cnt = (amount / coins[i]);

            // 将其数量添加到结果中。
            res += cnt;

            // 计算剩余的找零钱款值，也就是调整当前状态
            amount -= (cnt * coins[i]);
        }

        // 若全局目标已经达到。
        if (amount == 0)
            break;
    }

    return res;
}

int main()
{
    vector<unsigned> coins = {5, 2, 10, 1};

    assert(min_coins(coins, 11) == 2);

    size_t amount;
    cin >> amount;
    cout << min_coins(coins, amount) << endl;
    return 0;
}

